package Web;


import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

/**
 * 1. 创建 HttpClient：使用HttpClient.newHttpClient()创建一个全局的HttpClient实例，它内部利用线程池对多个 HTTP 连接进行优化，可以复用。
 * 2. 构建 HttpRequest：通过HttpRequest.newBuilder()进行链式调用，指定请求的 URI（这里是https://www.example.com，需替换为实际要访问的 URL），并设置请求方法为GET，最后调用build()方法构建出完整的HttpRequest对象。
 * 3. 发送请求并处理响应：使用client.send(request, HttpResponse.BodyHandlers.ofString())发送请求，并通过BodyHandlers.ofString()将响应体以字符串形式处理，然后可以分别获取响应的状态码、响应头和响应体并打印输出。
 *
 * */




public class HttpGetDemo {
    public static void main(String[] args) {
        // 创建HttpClient实例，内部使用线程池优化多个HTTP连接，可复用
        HttpClient client = HttpClient.newHttpClient();
        try {
            // 创建HttpRequest，指定请求的URI和请求方法（这里是GET）
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create("https://www.example.com"))  // 替换为你要访问的实际URL
                    .GET()
                    .build();
            // 发送请求并获取响应，使用BodyHandlers.ofString()将响应体以字符串形式处理
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            // 打印响应状态码
            System.out.println("响应状态码: " + response.statusCode());
            // 打印响应头
            System.out.println("响应头: " + response.headers());
            // 打印响应体
            System.out.println("响应体: " + response.body());
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}